var express = require('express');
var router = express.Router();

var { getData } = require("../tool/connect");
var { validateField } = require("../middleware/validate");

// /goods   返回所有商品
router.get('/', function (req, res, next) {
    // res.send("hello goods");
    getData("goods").then(list => {
        res.send({
            code: 200,
            message: "ok",
            list: list
        })
    }).catch(err => {
        res.send({
            code: 500,
            message: err.message,
        })
    })

});



// /goods   返回所有商品
router.get('/jsonp', function (req, res, next) {

    // 返回文本(js)
    // res.send(`for (var i = 1; i <= 100; i++) {
    //     console.log(i)
    // }`)

    // 返回数据
    // res.send([1, 2, 3, 4]); // "[1,2,3,4]"  => 脚本接收数据之后将其解析为数组 => 没有变量引用它

    // 返回函数调用格式的字符串  => 函数的()内放的是数据
    res.send("fn([1,2,3])");
});

router.get('/search/jsonp', validateField("wd"), validateField("col"), validateField("type"), validateField("page"), validateField("size"), function (req, res, next) {
    var { wd = "", col = "id", type = "asc", page = 1, size = "10", cb = "fn" } = req.query;
    console.log(req.query);
    getData("goods").then(list => {


        // list.filter(v=> v.title.includes(wd));

        // 筛选出包含指定关键词的商品
        var reg = new RegExp(wd, "i");
        var arr = list.filter(v => reg.test(v.title)); //搜索的内容组成的新数组 (商品名称中是否存在关键词)

        // 商品排序
        if (type == "asc") {
            arr.sort((a, b) => a[col] - b[col]);// 升序
        } else {
            arr.sort((a, b) => b[col] - a[col]); // 降序
        }

        // 数组裁切 => 对应下标取值
        // 每页显示10条(size)
        // 第1页  数据[1,10]   => 下标 0-9     =>  [0,10)
        // 第2页  数据[11,20]  => 下标 10-19   =>  [10,20)
        // 第3页  数据[21,30]  => 下标 20-29   =>  [20,30)
        // page                                   [ (page-1)*size  ,page*size)

        // 分页细节处理?  (页码的最小值和最大值  => page不能小于最小值,不能大于最大值)

        // 最大页  =  查询的总数据 / 每页显示多少条 => 向上取值
        var maxPage = Math.ceil(arr.length / size);

        if (page > maxPage) {
            page = maxPage;
        }

        if (page < 1) {  // 小于最小值
            page = 1;
        }


        // 数组分页  利用数组裁切的方式进行分页
        var startIndex = (page - 1) * size;
        var endIndex = page * size;


        arr = arr.slice(startIndex, endIndex);

        var obj = {
            code: 200,
            message: "ok",
            total: arr.length,  // 查询的数据条数
            maxPage, // 页面的最大值
            current: page, // 当前页是第几页
            list: arr
        }

        // res.send(`fn(${JSON.stringify(obj)})`)
        res.send(`${cb}(${JSON.stringify(obj)})`)
    }).catch(err => {
        var obj = {
            code: 500,
            message: err.message,
        }
        // res.send(`fn(${JSON.stringify(obj)})`)
        res.send(`${cb}(${JSON.stringify(obj)})`)
    })

});



/* 

/goods/search  商品搜索
请求方式: get
请求参数: 
wd       搜索的关键词(对应商品名称搜索  如果传""可以返回所有数据) 
col      排序列名(id,title,price)
type     排序方式(asc 升序,desc 下降)
page页码  (限制范围  最小值:1  最大值: 总数据/size => 向上取值)
size      每页显示多少条

*/

router.get('/search', validateField("wd"), validateField("col"), validateField("type"), validateField("page"), validateField("size"), function (req, res, next) {
    var { wd = "", col = "id", type = "asc", page = 1, size = "10" } = req.query;
    // console.log(req.query);
    getData("goods").then(list => {


        // list.filter(v=> v.title.includes(wd));

        // 筛选出包含指定关键词的商品
        var reg = new RegExp(wd, "i");
        var arr = list.filter(v => reg.test(v.title)); //搜索的内容组成的新数组 (商品名称中是否存在关键词)

        // 商品排序
        if (type == "asc") {
            arr.sort((a, b) => a[col] - b[col]);// 升序
        } else {
            arr.sort((a, b) => b[col] - a[col]); // 降序
        }

        // 数组裁切 => 对应下标取值
        // 每页显示10条(size)
        // 第1页  数据[1,10]   => 下标 0-9     =>  [0,10)
        // 第2页  数据[11,20]  => 下标 10-19   =>  [10,20)
        // 第3页  数据[21,30]  => 下标 20-29   =>  [20,30)
        // page                                   [ (page-1)*size  ,page*size)

        // 分页细节处理?  (页码的最小值和最大值  => page不能小于最小值,不能大于最大值)

        // 最大页  =  查询的总数据 / 每页显示多少条 => 向上取值
        var maxPage = Math.ceil(arr.length / size);

        if (page > maxPage) {
            page = maxPage;
        }

        if (page < 1) {  // 小于最小值
            page = 1;
        }


        // 数组分页  利用数组裁切的方式进行分页
        var startIndex = (page - 1) * size;
        var endIndex = page * size;


        arr = arr.slice(startIndex, endIndex);

        res.send({
            code: 200,
            message: "ok",
            total: arr.length,  // 查询的数据条数
            maxPage, // 页面的最大值
            current: page, // 当前页是第几页
            list: arr
        })
    }).catch(err => {
        res.send({
            code: 500,
            message: err.message,
        })
    })

});


router.get('/searchGoodsById', validateField("gid"), function (req, res, next) {
    var { gid } = req.query;

    getData("goods").then(list => {
        // 筛选出包含指定关键词的商品
        var goodsInfo = list.find(v => v.id == gid); // 找到对应id的商品

        if (goodsInfo) {
            res.send({
                code: 200,
                message: "ok",
                data: goodsInfo
            })
        } else {
            res.send({
                code: 300,
                message: "查询商品不存在",
            })
        }

    }).catch(err => {
        res.send({
            code: 500,
            message: err.message,
        })
    })

});



module.exports = router;
